home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / ISSUE13 / COMPRESS / COMPRESS.ZIP / BMTESTF.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-08-09  |  4.3 KB  |  129 lines

  1. unit bmtestf;
  2. (* TCompress V2.5 -- Compressed-Bitmap-As-Resources example program
  3.   This provides instructions and working code examples for:
  4.     a) Creating compressed bitmaps
  5.     b) Turning them into compressed resources
  6.     c) Loading/decompressing resources using LoadExpandedResource example program for tCompres
  7.     d) Loading bitmaps from the decompressed resource
  8.  
  9.   Note:
  10.   Although this example uses bitmaps, you can compress and
  11.   store/load ANY kind of resource. In fact, an entire compressed archive
  12.   (as created by COMPDEMO) can be stored as a resource -- as is done in
  13.   the self-extracting EXE examples, SELFEXTR.DPR and SELFXSML.DPR
  14.  
  15.   INSTRUCTIONS:
  16.   =============
  17.   Part A: Making a compressed bitmap file using the CompressABitmap method:
  18.   1. Choose a bitmap you like (e.g. FIREFISH.BMP) and put it in this directory
  19.   2. Alter the MyBitmapName constant to name it properly (note: NO extension)
  20.   3. Compile and run this program and push the Create button to make a compressed
  21.      copy of the bitmap file (FIREFISH.ARC)
  22.  
  23.   Part B: Turning the compressed bitmap into a resource, and loading it into the EXE:
  24.   4. Create a text file called BITMAPS.RC file containing the following (where
  25.      any reference to FireFish is replaced with the correct name of your bitmap):
  26. /* Compile this file with (16-bit): delphi\bin\brc -r BITMAPS.RC
  27.    or                     (32-bit): delphi2.0\bin\brc32 -r BITMAPS.RC
  28.    That will create a BITMAPS.RES file which should be included in the main
  29.    unit of your project.
  30. */
  31. Firefish TCOMPRESS "Firefish.arc"
  32.    (you can have as many lines as you have compressed bitmaps)
  33.  
  34.   5. Compile the resource file per the instructions in its header.
  35.      Then remove the "-" which is currently in the {$-R BITMAPS.RES} line
  36.      at the start of the implementation section of this file. This line
  37.      loads your new resource into the EXE when it links the program.
  38.  
  39.   Part C: Loading and decompressing a named bitmap with LoadABitmap:
  40.   6. Build and run the program (the compressed resource should now be in it)
  41.   7. Push the Load button to load from the resource into the TImage component
  42.      which is on the form.
  43.   8. Congratulations -- your bitmap should now be displayed!
  44.  
  45. *)
  46. interface
  47.  
  48. uses
  49.   Wintypes, Winprocs, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  50.   StdCtrls, Compress, ExtCtrls;
  51.  
  52. type
  53.   TForm1 = class(TForm)
  54.     Button1: TButton;
  55.     Image1: TImage;
  56.     Button2: TButton;
  57.     Compress1: TCompress;
  58.     Memo1: TMemo;
  59.     MyBitmap: TEdit;
  60.     procedure Button1Click(Sender: TObject);
  61.     procedure Button2Click(Sender: TObject);
  62.     procedure CompressABitmap(infilename, outfilename: string);
  63.     procedure LoadABitmap(bm: TBitmap;Resname: string);
  64.     procedure FormCreate(Sender: TObject);
  65.   private
  66.     { Private declarations }
  67.   public
  68.     { Public declarations }
  69.   end;
  70.  
  71. var
  72.   Form1: TForm1;
  73.  
  74. const MyBitmapName = 'FireFish';
  75.  
  76. implementation
  77.  
  78. {$R *.DFM}
  79. {-$R BITMAPS.RES} { Remove the "-" before recompiling and pushing the Load button }
  80.  
  81. { outfilename is assumed to be infilename but with an ARC extension,
  82.   but doesn't HAVE to be }
  83. procedure TForm1.CompressABitmap(infilename, outfilename: string);
  84. var infile, outfile: TFileStream;
  85. begin
  86.   infile := TFileStream.create(infilename,fmOpenRead);
  87.   outfile := TFileStream.create(outfilename,fmCreate);
  88.   try
  89.      Compress1.Compress(outfile,infile,coLZH);
  90.   finally
  91.     infile.free;
  92.     outfile.free;
  93.   end;
  94. end;
  95.  
  96. { Loads a bitmap from the stream created by TCompress'
  97.   LoadExpandedResource function }
  98. procedure TForm1.LoadABitmap(bm: TBitmap;Resname: string);
  99. var ResourceStream: TStream;
  100. begin
  101.    ResourceStream := Compress1.LoadExpandedResource(Resname,'');
  102.    try
  103.      bm.LoadFromStream(ResourceStream);
  104.    finally
  105.      ResourceStream.free;  { MUST make sure it gets freed }
  106.    end;
  107. end;
  108.  
  109. procedure TForm1.Button1Click(Sender: TObject);
  110. begin
  111.    CompressABitmap(MyBitmap.text+'.bmp',MyBitmap.Text+'.arc');
  112.    Showmessage('Created '+MyBItmap.Text+'.arc'#13#10+
  113.       'Please continue from Step #4 of the instructions...');
  114.    Close;
  115. end;
  116.  
  117. procedure TForm1.Button2Click(Sender: TObject);
  118. begin
  119.      Memo1.Visible := False;
  120.      LoadABitmap(Image1.Picture.Bitmap,Mybitmap.Text);
  121. end;
  122.  
  123. procedure TForm1.FormCreate(Sender: TObject);
  124. begin
  125.      MyBitmap.Text := MyBitMapName;
  126. end;
  127.  
  128. end.
  129.